{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "import seaborn as sns\n",
    "import scipy\n",
    "from collections import Counter\n",
    "from matplotlib.font_manager import FontProperties"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = pd.read_csv('data/train_set.csv', sep='\\t')\n",
    "df_test = pd.read_csv('data/test_a.csv', sep='\\t')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 简单查看数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>2967 6758 339 2021 1854 3731 4109 3792 4149 15...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>11</td>\n",
       "      <td>4464 486 6352 5619 2465 4802 1452 3137 5778 54...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>7346 4068 5074 3747 5681 6093 1777 2226 7354 6...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>7159 948 4866 2109 5520 2490 211 3956 5520 549...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>3646 3055 3055 2490 4659 6065 3370 5814 2465 5...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   label                                               text\n",
       "0      2  2967 6758 339 2021 1854 3731 4109 3792 4149 15...\n",
       "1     11  4464 486 6352 5619 2465 4802 1452 3137 5778 54...\n",
       "2      3  7346 4068 5074 3747 5681 6093 1777 2226 7354 6...\n",
       "3      2  7159 948 4866 2109 5520 2490 211 3956 5520 549...\n",
       "4      3  3646 3055 3055 2490 4659 6065 3370 5814 2465 5..."
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "200000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "发现text域的数据是字符串。我们想要得到整数序列。可以用字符串分割split()。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5120, str)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_train['text'][0]), type(df_train['text'][0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 长度分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### describe"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当前使用的函数split_df负责将一行数据按空格切分成整数列表，然后计算该列表的长度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def split_df(df_row):\n",
    "    return len(str(df_row).split())\n",
    "len_dist = np.vectorize(split_df)(df_train['text'])\n",
    "len_test_dist = np.vectorize(split_df)(df_test['text'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用describe函数查看训练集和测试集中的数据长度分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    200000.000000\n",
       "mean        907.207110\n",
       "std         996.029036\n",
       "min           2.000000\n",
       "25%         374.000000\n",
       "50%         676.000000\n",
       "75%        1131.000000\n",
       "max       57921.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(len_dist).describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    50000.000000\n",
       "mean       909.844960\n",
       "std       1032.313375\n",
       "min         14.000000\n",
       "25%        370.000000\n",
       "50%        676.000000\n",
       "75%       1133.000000\n",
       "max      41861.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(len_test_dist).describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过数据描述可以看到：\n",
    "* 训练集共200,000条新闻，每条新闻平均907个字符，最短的句子长度为2，最长的句子长度为57921，其中75%以下的数据长度在1131以下。\n",
    "* 测试集共50,000条新闻，每条新闻平均909个字符，最短句子长度为14，最长句子41861,75%以下的数据长度在1133以下。\n",
    "* 训练集和测试集就长度来说似乎是同一分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAAFzCAYAAAB/xLx5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3df7SVZZ338fe3I4IkimK6UHw6aOQIViSItMyyfET88aQ1Tpk1kjnSjE7aM40jPjWWTbPCp3kaYsYfWVJmkjpUoyudlAzHavwFiCmSgYojaGEYiL9Q8Pv8sS9oC+fABs6+zzn7vF9r3Wvf93X/2N997rW2Hy+ufd2RmUiSJEmqxhu6uwBJkiSpLzGAS5IkSRUygEuSJEkVMoBLkiRJFTKAS5IkSRUygEuSJEkV2qm7C6jaXnvtle3t7d1dhiRJklrYvHnzfp+Zb+poX58L4O3t7cydO7e7y5AkSVILi4gnOtvnEBRJkiSpQgZwSZIkqUIGcEmSJKlCfW4MuCRJkl7v1VdfZdmyZbz88svdXUqvM2DAAIYNG0a/fv0aPscALkmS1MctW7aMQYMG0d7eTkR0dzm9RmaycuVKli1bxvDhwxs+zyEokiRJfdzLL7/MkCFDDN/bKCIYMmTINv/LgQFckiRJhu/ttD1/NwO4JEmSVCHHgEuSJOl12qfc3KXXWzr1hK0es2rVKmbOnMnZZ5+9Tdc+/vjjmTlzJoMHD96m8z7xiU9w4okncsopp2zTeV3BHnBJkiR1u1WrVnHZZZdt1r5u3botnnfLLbdsc/jubgZwSZIkdbspU6bw6KOPMnr0aA477DCOPPJIPvCBDzBy5EgATj75ZMaMGcOoUaO48sorN57X3t7O73//e5YuXcrBBx/MWWedxahRo5gwYQIvvfRSQ+89b9483vve9zJmzBiOPfZYnn76aQCOOuooLrjgAsaNG8db3/pWfv7zn3fJZzWAS5IkqdtNnTqVAw88kAULFvDVr36V+fPn8/Wvf53f/OY3AMyYMYN58+Yxd+5cpk+fzsqVKze7xuLFiznnnHNYuHAhgwcP5gc/+MFW3/fVV1/l05/+NLNmzWLevHl88pOf5HOf+9zG/evWrePee+9l2rRpXHzxxV3yWR0DLkmSpB5n3Lhxr5tbe/r06fzoRz8C4Mknn2Tx4sUMGTLkdecMHz6c0aNHAzBmzBiWLl261fd55JFHeOihhzjmmGMAWL9+PUOHDt24/0Mf+tA2Xa8RfS6AP7h8dYc/LGjkxwGSJEmqxhvf+MaN63fccQc//elPueuuuxg4cCBHHXVUh3Nv9+/ff+N6W1tbQ0NQMpNRo0Zx1113dbh/wzXb2tq2Oh69UQ5BkSRJUrcbNGgQa9as6XDf6tWr2WOPPRg4cCC//vWvufvuu7vsfQ866CCeeeaZjQH81VdfZeHChV12/Y70uR5wSZIkbVl3jAwYMmQIRxxxBIcccgi77LIL++yzz8Z9EydO5IorruDggw/moIMOYvz48V32vjvvvDOzZs3i3HPPZfXq1axbt47PfOYzjBo1qsveY1ORmU27eE/Uf+iIHDpp2mbtDkGRJEl91aJFizj44IO7u4xeq6O/X0TMy8yxHR3vEBRJkiSpQg5BkSRJUss655xz+OUvf/m6tvPOO48zzjijmyoygEuSJKmFXXrppd1dwmYcgiJJkiRVyAAuSZIkVcgALkmSJFXIAC5JkiRVyB9hSpIk6fW+uHsXX2/1Vg9ZtWoVM2fO5Oyzz97my0+bNo3JkyczcODATo9pb29n7ty57LXXXtt8/a5mD7gkSZK63apVq7jsssu269xp06bx4osvdnFFzWMPuCRJkrrdlClTePTRRxk9ejTHHHMMe++9NzfccANr167lgx/8IBdffDEvvPACH/7wh1m2bBnr16/n7//+7/nd737HU089xfve9z722msv5syZs9X3+t73vsf06dN55ZVXOPzww7nssstoa2tj11135bzzzuPHP/4xu+yyCzfeeCP77LNPl39We8AlSZLU7aZOncqBBx7IggULOOaYY1i8eDH33nsvCxYsYN68edx555385Cc/Yd999+WBBx7goYceYuLEiZx77rnsu+++zJkzp6HwvWjRIq6//np++ctfsmDBAtra2rj22msBeOGFFxg/fjwPPPAA73nPe/jmN7/ZlM9qD7gkSZJ6lNtuu43bbruNd77znQA8//zzLF68mCOPPJLPfvazXHDBBZx44okceeSR23zt22+/nXnz5nHYYYcB8NJLL7H33nsDsPPOO3PiiScCMGbMGGbPnt1Fn+j1DOCSJEnqUTKTCy+8kE996lOb7Zs/fz633HILn//85zn66KO56KKLtvnakyZN4itf+cpm+/r1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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1,1,figsize=(12,6))\n",
    "\n",
    "ax = plt.hist(x=len_dist, bins=100)\n",
    "ax = plt.hist(x=len_test_dist, bins=100)\n",
    "\n",
    "plt.xlim([0, max(max(len_dist), max(len_test_dist))])\n",
    "plt.xlabel(\"length of sample\")\n",
    "plt.ylabel(\"number of sample\")\n",
    "plt.legend(['train_len','test_len'])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用seaborn绘制更好的图。seaborn计算的纵坐标是频率，而不是出现次数。由于训练集和测试集的数据量不一样，因此用频率更加科学、更能看出是否符合同一分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fbb16a61990>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(15,5))\n",
    "ax = sns.distplot(len_dist, bins=100)\n",
    "ax = sns.distplot(len_test_dist, bins=100)\n",
    "plt.xlim([0, max(max(len_dist), max(len_test_dist))])\n",
    "plt.xlabel(\"length of sample\")\n",
    "plt.ylabel(\"prob of sample\")\n",
    "plt.legend(['train_len','test_len'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 同分布验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Ks_2sampResult(statistic=0.004049999999999998, pvalue=0.5279614323123156)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy\n",
    "scipy.stats.ks_2samp(len_dist, len_test_dist)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "P值为0.52，比指定的显著水平（假设为5%）大，我们认为二者同分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 截断位置"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑到数据长度分布是长尾分布，log一下看看是不是`正态分布`，如果是`正态分布`，使用`3sigma`法则作为截断的参考。如果不是，则就只能瞎猜了\n",
    "\n",
    "测量拟合分布的均值和方差sigma原则：\n",
    "* `1σ原则`：数值分布在`(μ-σ,μ+σ)`中的概率为`0.6526`；\n",
    "* `2σ原则`：数值分布在`(μ-2σ,μ+2σ)`中的概率为`0.9544`；\n",
    "* `3σ原则`：数值分布在`(μ-3σ,μ+3σ)`中的概率为`0.9974`；\n",
    "\n",
    "由于“小概率事件”和假设检验的基本思想 “小概率事件”通常指发生的概率小于5%的事件，认为在一次试验中该事件是几乎不可能发生的。由此可见X落在(μ-3σ,μ+3σ)以外的概率小于千分之三，在实际问题中常认为相应的事件是不会发生的，基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间，这称之为正态分布的“3σ”原则。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fbb140d8210>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "log_len_dist = np.log(1+len_dist)\n",
    "log_len_test_dist = np.log(1+len_test_dist)\n",
    "plt.figure(figsize=(15,5))\n",
    "ax = sns.distplot(log_len_dist)\n",
    "ax = sns.distplot(log_len_test_dist)\n",
    "plt.xlabel(\"log length of sample\")\n",
    "plt.ylabel(\"prob of log\")\n",
    "plt.legend(['train_len','test_len'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从log图上也能看出二者（很像）同分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先验证训练集分布为正态分布："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_, lognormal_ks_pvalue = scipy.stats.kstest(rvs=log_len_dist, cdf='norm')\n",
    "lognormal_ks_pvalue"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "？0？？？拟合优度检验，p值为0，意思就是说这不是一个正态分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "之前我们把数据log了一下，但是这里有更科学的变换方式。log只是box-cox变换的特殊形式。我们使用box-cox变换再次做一下验证，是否为正态分布："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "NormaltestResult(statistic=1347.793358118494, pvalue=2.1398873511704724e-293)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trans_data, lam = scipy.stats.boxcox(len_dist+1)\n",
    "scipy.stats.normaltest(trans_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "p值约等于0，这说明我们的假设不成立。\n",
    "\n",
    "但总归是要猜一个截断值的。看log图上8.5的位置比较靠谱。np.exp(8.5)=4914约等于5000，因此我初步决定把截断长度定为5000。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 类别信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 简单查看类别信息表"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先改造一下df_train，多加几个字段，分别是：\n",
    "* text-split，将text字段分词\n",
    "* len，每条新闻长度\n",
    "* first_char，新闻第一个字符\n",
    "* last_char，新闻最后一个字符\n",
    "* most_freq，新闻最常出现的字符"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>text</th>\n",
       "      <th>text_split</th>\n",
       "      <th>len</th>\n",
       "      <th>first_char</th>\n",
       "      <th>last_char</th>\n",
       "      <th>most_freq</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>2967 6758 339 2021 1854 3731 4109 3792 4149 15...</td>\n",
       "      <td>[2967, 6758, 339, 2021, 1854, 3731, 4109, 3792...</td>\n",
       "      <td>1057</td>\n",
       "      <td>2967</td>\n",
       "      <td>1635</td>\n",
       "      <td>3750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>11</td>\n",
       "      <td>4464 486 6352 5619 2465 4802 1452 3137 5778 54...</td>\n",
       "      <td>[4464, 486, 6352, 5619, 2465, 4802, 1452, 3137...</td>\n",
       "      <td>486</td>\n",
       "      <td>4464</td>\n",
       "      <td>900</td>\n",
       "      <td>3750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>7346 4068 5074 3747 5681 6093 1777 2226 7354 6...</td>\n",
       "      <td>[7346, 4068, 5074, 3747, 5681, 6093, 1777, 222...</td>\n",
       "      <td>764</td>\n",
       "      <td>7346</td>\n",
       "      <td>57</td>\n",
       "      <td>3750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>7159 948 4866 2109 5520 2490 211 3956 5520 549...</td>\n",
       "      <td>[7159, 948, 4866, 2109, 5520, 2490, 211, 3956,...</td>\n",
       "      <td>1570</td>\n",
       "      <td>7159</td>\n",
       "      <td>2662</td>\n",
       "      <td>3750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>3646 3055 3055 2490 4659 6065 3370 5814 2465 5...</td>\n",
       "      <td>[3646, 3055, 3055, 2490, 4659, 6065, 3370, 581...</td>\n",
       "      <td>307</td>\n",
       "      <td>3646</td>\n",
       "      <td>1635</td>\n",
       "      <td>3055</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   label                                               text  \\\n",
       "0      2  2967 6758 339 2021 1854 3731 4109 3792 4149 15...   \n",
       "1     11  4464 486 6352 5619 2465 4802 1452 3137 5778 54...   \n",
       "2      3  7346 4068 5074 3747 5681 6093 1777 2226 7354 6...   \n",
       "3      2  7159 948 4866 2109 5520 2490 211 3956 5520 549...   \n",
       "4      3  3646 3055 3055 2490 4659 6065 3370 5814 2465 5...   \n",
       "\n",
       "                                          text_split   len first_char  \\\n",
       "0  [2967, 6758, 339, 2021, 1854, 3731, 4109, 3792...  1057       2967   \n",
       "1  [4464, 486, 6352, 5619, 2465, 4802, 1452, 3137...   486       4464   \n",
       "2  [7346, 4068, 5074, 3747, 5681, 6093, 1777, 222...   764       7346   \n",
       "3  [7159, 948, 4866, 2109, 5520, 2490, 211, 3956,...  1570       7159   \n",
       "4  [3646, 3055, 3055, 2490, 4659, 6065, 3370, 581...   307       3646   \n",
       "\n",
       "  last_char  most_freq  \n",
       "0      1635       3750  \n",
       "1       900       3750  \n",
       "2        57       3750  \n",
       "3      2662       3750  \n",
       "4      1635       3055  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train['text_split'] = df_train['text'].apply(lambda x:x.split())\n",
    "df_train['len'] = df_train['text'].apply(lambda x:len(x.split()))\n",
    "df_train['first_char'] = df_train['text_split'].apply(lambda x:x[0])\n",
    "df_train['last_char'] = df_train['text_split'].apply(lambda x:x[-1])\n",
    "df_train['most_freq'] = df_train['text_split'].apply(lambda x:np.argmax(np.bincount(x)))\n",
    "df_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "构建一个类别信息表。\n",
    "* count，该类别新闻个数\n",
    "* len_mean，该类别新闻平均长度\n",
    "* len_std，该类别新闻长度标准差\n",
    "* len_min，该类别新闻长度最小值\n",
    "* len_max，该类别新闻长度最大值\n",
    "* freq_fc，该类别新闻最常出现的第一个字符\n",
    "* freq_lc，该类别新闻最常出现的最后一个字符\n",
    "* freq_freq，该类别新闻最常出现的字符"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>len_mean</th>\n",
       "      <th>len_std</th>\n",
       "      <th>len_min</th>\n",
       "      <th>len_max</th>\n",
       "      <th>freq_fc</th>\n",
       "      <th>freq_lc</th>\n",
       "      <th>freq_freq</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>38918.0</td>\n",
       "      <td>878.717663</td>\n",
       "      <td>859.302990</td>\n",
       "      <td>12.0</td>\n",
       "      <td>18587.0</td>\n",
       "      <td>2400.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>36945.0</td>\n",
       "      <td>870.363676</td>\n",
       "      <td>1451.060541</td>\n",
       "      <td>9.0</td>\n",
       "      <td>57921.0</td>\n",
       "      <td>1141.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>31425.0</td>\n",
       "      <td>1014.429562</td>\n",
       "      <td>737.313693</td>\n",
       "      <td>2.0</td>\n",
       "      <td>41894.0</td>\n",
       "      <td>1580.0</td>\n",
       "      <td>2662.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>22133.0</td>\n",
       "      <td>784.774726</td>\n",
       "      <td>739.347231</td>\n",
       "      <td>17.0</td>\n",
       "      <td>10817.0</td>\n",
       "      <td>7346.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15016.0</td>\n",
       "      <td>649.705647</td>\n",
       "      <td>718.689556</td>\n",
       "      <td>25.0</td>\n",
       "      <td>14928.0</td>\n",
       "      <td>1141.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>12232.0</td>\n",
       "      <td>1116.054938</td>\n",
       "      <td>910.002484</td>\n",
       "      <td>27.0</td>\n",
       "      <td>15839.0</td>\n",
       "      <td>5744.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>9985.0</td>\n",
       "      <td>1249.114071</td>\n",
       "      <td>1203.464887</td>\n",
       "      <td>16.0</td>\n",
       "      <td>25728.0</td>\n",
       "      <td>3659.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8841.0</td>\n",
       "      <td>1157.883271</td>\n",
       "      <td>942.048602</td>\n",
       "      <td>11.0</td>\n",
       "      <td>14469.0</td>\n",
       "      <td>6835.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>7847.0</td>\n",
       "      <td>712.401172</td>\n",
       "      <td>898.704321</td>\n",
       "      <td>7.0</td>\n",
       "      <td>15271.0</td>\n",
       "      <td>913.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>5878.0</td>\n",
       "      <td>833.627084</td>\n",
       "      <td>739.593276</td>\n",
       "      <td>17.0</td>\n",
       "      <td>23866.0</td>\n",
       "      <td>7346.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>4920.0</td>\n",
       "      <td>911.138008</td>\n",
       "      <td>958.311796</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20622.0</td>\n",
       "      <td>3523.0</td>\n",
       "      <td>885.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>3131.0</td>\n",
       "      <td>608.889812</td>\n",
       "      <td>509.755296</td>\n",
       "      <td>21.0</td>\n",
       "      <td>5729.0</td>\n",
       "      <td>6811.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>1821.0</td>\n",
       "      <td>1194.969248</td>\n",
       "      <td>1108.697967</td>\n",
       "      <td>25.0</td>\n",
       "      <td>8737.0</td>\n",
       "      <td>5006.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>908.0</td>\n",
       "      <td>735.325991</td>\n",
       "      <td>795.676666</td>\n",
       "      <td>26.0</td>\n",
       "      <td>6399.0</td>\n",
       "      <td>1999.0</td>\n",
       "      <td>2662.0</td>\n",
       "      <td>3750.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count     len_mean      len_std  len_min  len_max  freq_fc  freq_lc  \\\n",
       "0   38918.0   878.717663   859.302990     12.0  18587.0   2400.0    900.0   \n",
       "1   36945.0   870.363676  1451.060541      9.0  57921.0   1141.0    900.0   \n",
       "2   31425.0  1014.429562   737.313693      2.0  41894.0   1580.0   2662.0   \n",
       "3   22133.0   784.774726   739.347231     17.0  10817.0   7346.0    900.0   \n",
       "4   15016.0   649.705647   718.689556     25.0  14928.0   1141.0    900.0   \n",
       "5   12232.0  1116.054938   910.002484     27.0  15839.0   5744.0    900.0   \n",
       "6    9985.0  1249.114071  1203.464887     16.0  25728.0   3659.0    900.0   \n",
       "7    8841.0  1157.883271   942.048602     11.0  14469.0   6835.0    900.0   \n",
       "8    7847.0   712.401172   898.704321      7.0  15271.0    913.0    900.0   \n",
       "9    5878.0   833.627084   739.593276     17.0  23866.0   7346.0    900.0   \n",
       "10   4920.0   911.138008   958.311796     14.0  20622.0   3523.0    885.0   \n",
       "11   3131.0   608.889812   509.755296     21.0   5729.0   6811.0    900.0   \n",
       "12   1821.0  1194.969248  1108.697967     25.0   8737.0   5006.0    900.0   \n",
       "13    908.0   735.325991   795.676666     26.0   6399.0   1999.0   2662.0   \n",
       "\n",
       "    freq_freq  \n",
       "0      3750.0  \n",
       "1      3750.0  \n",
       "2      3750.0  \n",
       "3      3750.0  \n",
       "4      3750.0  \n",
       "5      3750.0  \n",
       "6      3750.0  \n",
       "7      3750.0  \n",
       "8      3750.0  \n",
       "9      3750.0  \n",
       "10     3750.0  \n",
       "11     3750.0  \n",
       "12     3750.0  \n",
       "13     3750.0  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train_info = pd.DataFrame(columns=['count','len_mean','len_std','len_min','len_max','freq_fc','freq_lc','freq_freq'])\n",
    "for name, group in df_train.groupby('label'):\n",
    "    count = len(group) # 该类别新闻数\n",
    "    len_mean = np.mean(group['len']) # 该类别长度平均值\n",
    "    len_std = np.std(group['len']) # 长度标准差\n",
    "    len_min = np.min(group['len']) # 最短的新闻长度\n",
    "    len_max = np.max(group['len']) # 最长的新闻长度\n",
    "    freq_fc = np.argmax(np.bincount(group['first_char'])) # 最频繁出现的首词\n",
    "    freq_lc = np.argmax(np.bincount(group['last_char'])) # 最频繁出现的末词\n",
    "    freq_freq = np.argmax(np.bincount(group['most_freq'])) # 该类别最频繁出现的词\n",
    "    df_train_info.loc[name] = [count,len_mean,len_std,len_min,len_max,freq_fc,freq_lc,freq_freq]\n",
    "df_train_info"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 类别分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "zhfont = FontProperties(fname=\"simsun.ttc\", size=14)\n",
    "label_2_index_dict = {'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}\n",
    "index_2_label_dict = {v:k for k,v in label_2_index_dict.items()}\n",
    "\n",
    "plt.figure()\n",
    "plt.bar(x=range(14), height=np.bincount(df_train['label']))\n",
    "plt.xlabel(\"label\")\n",
    "plt.ylabel(\"number of sample\")\n",
    "plt.xticks(range(14), list(index_2_label_dict.values()), fontproperties=zhfont, rotation=60)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从统计结果可以看出\n",
    "* 赛题的数据集类别分布存在较为不均匀的情况。在训练集中科技类新闻最多，其次是股票类新闻，最少的新闻是星座新闻。\n",
    "* 由于类别不均衡，会严重影响模型的精度。但是我们也是有办法应对的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 类别长度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([<matplotlib.axis.XTick at 0x7fb66713ed90>,\n",
       "  <matplotlib.axis.XTick at 0x7fb66713ed50>,\n",
       "  <matplotlib.axis.XTick at 0x7fb6670de490>,\n",
       "  <matplotlib.axis.XTick at 0x7fb6670f9ad0>,\n",
       "  <matplotlib.axis.XTick at 0x7fb6670f9d90>,\n",
       "  <matplotlib.axis.XTick at 0x7fb6670fe550>,\n",
       "  <matplotlib.axis.XTick at 0x7fb66713e950>,\n",
       "  <matplotlib.axis.XTick at 0x7fb66709bed0>,\n",
       "  <matplotlib.axis.XTick at 0x7fb667057510>,\n",
       "  <matplotlib.axis.XTick at 0x7fb667057a50>,\n",
       "  <matplotlib.axis.XTick at 0x7fb667057950>,\n",
       "  <matplotlib.axis.XTick at 0x7fb66709bdd0>,\n",
       "  <matplotlib.axis.XTick at 0x7fb66705d290>,\n",
       "  <matplotlib.axis.XTick at 0x7fb66705d7d0>],\n",
       " [Text(0, 0, '科技'),\n",
       "  Text(1, 0, '股票'),\n",
       "  Text(2, 0, '体育'),\n",
       "  Text(3, 0, '娱乐'),\n",
       "  Text(4, 0, '时政'),\n",
       "  Text(5, 0, '社会'),\n",
       "  Text(6, 0, '教育'),\n",
       "  Text(7, 0, '财经'),\n",
       "  Text(8, 0, '家居'),\n",
       "  Text(9, 0, '游戏'),\n",
       "  Text(10, 0, '房产'),\n",
       "  Text(11, 0, '时尚'),\n",
       "  Text(12, 0, '彩票'),\n",
       "  Text(13, 0, '星座')])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_train['len'] = df_train['text'].apply(lambda x: len(x.split()))\n",
    "plt.figure()\n",
    "ax = sns.catplot(x='label', y='len', data=df_train, kind='strip')\n",
    "plt.xticks(range(14), list(index_2_label_dict.values()), fontproperties=zhfont, rotation=60)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不同类别的文章长度不同，可以把长度作为一个Feature，以供机器学习模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 字符分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练集中总共包括6869个字，最大数字为7549，最小数字为0，其中编号3750的字出现的次数最多，编号3133的字出现的次数最少，仅出现一次。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6869\n",
      "('3750', 7482224)\n",
      "('3133', 1)\n"
     ]
    }
   ],
   "source": [
    "# 内存警告！！！没有8G内存不要运行该代码\n",
    "all_lines = ' '.join(list(df_train['text']))\n",
    "word_count = Counter(all_lines.split(\" \"))\n",
    "word_count = sorted(word_count.items(), key=lambda d:d[1], reverse=True)\n",
    "\n",
    "print(len(word_count))\n",
    "# 6869\n",
    "\n",
    "print(word_count[0])\n",
    "# ('3750', 7482224)\n",
    "\n",
    "print(word_count[-1])\n",
    "# ('3133', 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面代码统计了不同字符在多少个句子中出现过，其中字符3750、字符900和字符648在20w新闻的覆盖率接近99%，很有可能是标点符号。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3750 occurs 197997 times, 98.9985%\n",
      "900 occurs 197653 times, 98.8265%\n",
      "648 occurs 191975 times, 95.9875%\n",
      "2465 occurs 177310 times, 88.655%\n",
      "6122 occurs 176543 times, 88.2715%\n",
      "CPU times: user 49.1 s, sys: 9.54 s, total: 58.6 s\n",
      "Wall time: 58.7 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "df_train['text_unique'] = df_train['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))\n",
    "all_lines = ' '.join(list(df_train['text_unique']))\n",
    "word_count = Counter(all_lines.split(\" \"))\n",
    "word_count = sorted(word_count.items(), key=lambda d:int(d[1]), reverse=True)\n",
    "# 打印整个训练集中覆盖率前5的词\n",
    "for i in range(5):\n",
    "    print(\"{} occurs {} times, {}%\".format(word_count[i][0], word_count[i][1], (word_count[i][1]/200000)*100))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 分析总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 训练集共200,000条新闻，每条新闻平均907个字符，最短的句子长度为2，最长的句子长度为57921，其中75%以下的数据长度在1131以下。测试集共50,000条新闻，每条新闻平均909个字符，最短句子长度为14，最长句子41861,75%以下的数据长度在1133以下。\n",
    "2. 训练集和测试集就长度来说似乎是同一分布，但是不属于正态分布。\n",
    "3. 赛题的数据集类别分布存在较为不均匀的情况。在训练集中科技类新闻最多，其次是股票类新闻，最少的新闻是星座新闻。需要用采样方法解决。文章最长的是股票类新闻。不同类别的文章长度不同，可以把长度和句子个数作为一个Feature，以供机器学习模型训练。\n",
    "4. 训练集中总共包括6869个字，最大数字为7549，最小数字为0，其中编号3750的字出现的次数最多，编号3133的字出现的次数最少，仅出现一次，其中字符3750、字符900和字符648在20w新闻的覆盖率接近99%，很有可能是标点符号。\n",
    "5. 900很有可能是句号，2662和885则很有可能为感叹号和问号，3750出现频率很高但是基本不在新闻最后出现，因此初步判断为逗号。按照这种划分，训练集中每条新闻平均句子个数约为19。\n",
    "6. 在训练集中，不同类别新闻出现词汇有特色。但是需要把共有的常用词停用。自然想到利用TF-IDF编码方式。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tf2-env",
   "language": "python",
   "name": "tf2-env"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
